根据元素的排名对数据框进行排序并创建新列 您所在的位置:网站首页 pandas groupby排序 根据元素的排名对数据框进行排序并创建新列

根据元素的排名对数据框进行排序并创建新列

2022-12-23 12:29| 来源: 网络整理| 查看: 265

我有以下数据帧:

import pandas as pd df = pd.DataFrame( { 'id': [1, 1, 1, 1, 2, 2,2, 2, 3, 3, 3, 3], 'name': ['A', 'B', 'C', 'D','A', 'B','C', 'D', 'A', 'B','C', 'D'], 'Value': [1, 2, 3, 4, 5, 6, 0, 2, 4, 6, 3, 5] }, columns=['name','id','Value'])`

我可以使用id和value对数据进行排序,如下所示:

df.sort_values(['id','Value'],ascending = [True,False])

我打印的表格将显示如下:

name id Value D 1 4 C 1 3 B 1 2 A 1 1 B 2 6 A 2 5 D 2 2 C 2 0 B 3 6 D 3 5 A 3 4 C 3 3

如果列名中的元素是最高值,我想创建4个新列 (Rank1,Rank2,Rank3,Rank4),列Rank1将被指定为1,否则为0.如果列名中的元素是第二高值,则列Rank2将被指定为1,否则为0.Rank3和Rank4也是如此.

我怎么能这样做?

谢谢.

泽普

1> jezrael..:

使用:

df = df.join(pd.get_dummies(df.groupby('id').cumcount().add(1)).add_prefix('Rank')) print (df) name id Value Rank1 Rank2 Rank3 Rank4 3 D 1 4 1 0 0 0 2 C 1 3 0 1 0 0 1 B 1 2 0 0 1 0 0 A 1 1 0 0 0 1 5 B 2 6 1 0 0 0 4 A 2 5 0 1 0 0 7 D 2 2 0 0 1 0 6 C 2 0 0 0 0 1 9 B 3 6 1 0 0 0 11 D 3 5 0 1 0 0 8 A 3 4 0 0 1 0 10 C 3 3 0 0 0 1

细节:

对于每组使用的计数GroupBy.cumcount,然后添加1:

print (df.groupby('id').cumcount().add(1)) 3 1 2 2 1 3 0 4 5 1 4 2 7 3 6 4 9 1 11 2 8 3 10 4 dtype: int64

对于指标列使用get_dumes有add_prefix:

print (pd.get_dummies(df.groupby('id').cumcount().add(1)).add_prefix('Rank')) Rank1 Rank2 Rank3 Rank4 3 1 0 0 0 2 0 1 0 0 1 0 0 1 0 0 0 0 0 1 5 1 0 0 0 4 0 1 0 0 7 0 0 1 0 6 0 0 0 1 9 1 0 0 0 11 0 1 0 0 8 0 0 1 0 10 0 0 0 1


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有